﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System;
using System.Data.Common;
using System.IO;

namespace Pittypat
{
    /// <summary>
    /// 表示一个从 DbDataReader 中读取到的数据对象。
    /// </summary>
    /// <remarks>
    /// <para>
    /// 通常 Pittypat 自动创建该类的子类，并自动提供实现，不需要开发者自己编写代码。
    /// </para>
    /// <para>
    /// 数据对象是通过 Pittypat 设计的模块中的某个对象的实例。在数据库中通常映射为视图中的一行。
    /// 如果设计一个功能时，功能的类型是对象或对象集合，但是没有具体指定是哪一个对象时，会使用 DataModel 占位。这是一种不合理的设计，但是为了确保输出的代码不会出现错误而使用 DataModel 占位。
    /// </para>
    /// </remarks>
    public class DataModel : Model
    {
        /// <summary>
        /// 初始化 <see cref="DataModel"/> 类的新实例。
        /// </summary>
        public DataModel()
        {
        }

        /// <summary>
        /// 从一个 DbDataReader 中读取此对象。<see cref="DataModel"/> 类不提供任何实现，也不产生异常。继承类应该总是实现该方法。
        /// </summary>
        /// <param name="reader">包含对象数据的 DbDataReader 对象。</param>
        public virtual void Read(DbDataReader reader)
        {
        }

        /// <summary>
        /// 将当前对象作为 JSON 字符串写入指定的文本流。<see cref="DataModel"/> 类编写为空对象：{}。继承类应该总是实现该方法。
        /// </summary>
        /// <param name="writer">目标文本流。</param>
        /// <exception cref="ArgumentNullException">writer 是 null。</exception>
        public override void Write(TextWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            writer.Write("{}");
        }
    }
}
